package com.zynote.nfhoujie.dao;

import java.util.List;
import com.zynote.nfhoujie.model.Commodity;
import com.zynote.nfhoujie.model.view.MultiCommodityView;

/**
 * 
 * @className:ICommodityDAO.java
 * @classDescription:商品数据访问层接口
 * @author: AIDAN SU
 * @createTime: 2012-10-6
 *
 */
public interface ICommodityDAO {

	/**
	 * 根据商品ID获取商品
	 * @param id 商品ID
	 * @return 商品
	 */
	Commodity findCommodityById(Long id ) ;
	
	/**
	 * 更新商品
	 * @param commodity 商品
	 */
	void updateCommodity(Commodity commodity );
	
	/**
	 * 创建商品
	 * @param commodity 商品
	 * @return 图书ID
	 */
	Long createCommodity(Commodity commodity );
	
	/**
	 * 删除商品
	 * @param commodity 商品
	 */
	void deleteCommodity(Commodity commodity );
	
	/**
	 * 根据ID删除商品
	 * @param id 商品ID
	 */
	void deleteCommodityById(Long id ) ;
	
	/**
	 * 统计所有的商品数量
	 * @return 商品数量
	 */
	int countAllCommoditys() ;
	
	/**
	 * 统计一类商品数量
	 * @return 商品数量
	 */
	int countTypeCommoditys(Integer parentCategory) ;
	
	/**
	 * 统计用户发布的商品数量
	 * @param uid 用户ID
	 * @return 商品数量
	 */
	int countCommoditys( Long uid ) ;
	
	/**
	 * 统计正在交易或已经交易完成的商品数量
	 * @param commodityStatus 商品交易状态
	 * @return 商品数量
	 */
	int countStatusCommoditys( Integer commodityStatus ) ;
	
	/**
	 * 获取商品列表分页
	 * @param startPosition 开始位置
	 * @param pageSize 每页的记录大小
	 * @return 商品列表
	 */
	List<MultiCommodityView> listAllCommoditys( int startPosition, int pageSize ) ;
	
	/**
	 * 获取一类商品列表分页
	 * @param startPosition 开始位置
	 * @param pageSize 每页的记录大小
	 * @return 商品列表
	 */
	List<MultiCommodityView> listTypeCommoditys( int startPosition, int pageSize ,int parentCategory ) ;
	
	/**
	 * 获取我的商品列表分页
	 * @param startPosition 开始位置
	 * @param pageSize 每页的记录大小
	 * @param uid 用户ID
	 * @return 商品列表
	 */
	List<MultiCommodityView> listMyCommoditys( int startPosition, int pageSize, Long uid ) ;

}
